/*
 * TacticaPaco1.java
 *
 * Created on 12 de marzo de 2007, 23:12
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes2007.MolinaCF;

import futbol.tacticas.concursantes.Tactica;

import java.awt.*;
import java.util.Vector;
import java.math.*;
import futbol.tacticas.*;

/**
 *
 * @author Administrador
 */
public class TacticaPaco1 implements Tactica {
    
    private int nValores[][]={
        {-150,0,6},  // Jugador 1[0]
        {-110,-20,6},  // Jugador 2[1]
        {-110,20,6},  // Jugador 3[2]
        {-110,0,7},  // Jugador 4[3]
        {-65,10,5},  // Jugador 5[4]
        {-65,-10,5},  // Jugador 6[5]
        {5,0,6},  // Jugador 7[6]
        {40,80,6},  // Jugador 8[7]
        {40,-80,6},  // Jugador 9[8]
        {90,30,6},  // Jugador 10[9]
        {90,-30,6}  // Jugador 11[10]
    };

    public Color getColor1() {
        return Color.RED;
    }
    
    public Color getColor2() {
        return Color.WHITE;
    }    
    
    public Color getColorNumero() {
        return Color.BLACK;
    }
    
    public String getNombre() {
        return "Molina C.F.";
    }

    public int getXInicial(int n) {
        return nValores[n][0];
    }
    
    public int getYInicial(int n) {
        return nValores[n][1];
    }
    
    public int getFuerza(int n) {
        return nValores[n][2];
    }
    
    public Vector<Comando> getComandos(SituacionJugadores sj) {
        Vector<Comando> com=new Vector();
        
        //Posicionamiento
        for (int n=0;n<11;n++)
            com.add(new ComandoIrA(n,nValores[n][0],nValores[n][1]));
        
        Point bola=sj.getBola();
        Point contrarios[]=sj.getContrario();
        
        //Movimiento jugadores
        int y=(int)(bola.getY());
        if (y<-25) y=-25;
        if (y>25) y=25;
        com.add(new ComandoIrA(0,nValores[0][0], y));
        com.add(new ComandoIrA(1,nValores[1][0], y-20));
        com.add(new ComandoIrA(2,nValores[2][0], y+20));
        com.add(new ComandoIrA(3,nValores[3][0], y));
        com.add(new ComandoIrA(4,nValores[4][0], y+10));
        com.add(new ComandoIrA(5,nValores[5][0], y-10));
        
        y=(int)(bola.getY());
        if(y<0) {
            com.add(new ComandoIrA(6,nValores[6][0], nValores[6][1]+y));
            com.add(new ComandoIrA(7,nValores[7][0], nValores[7][1]+y));
            com.add(new ComandoIrA(9,nValores[9][0], nValores[9][1]+y));          
        }
        if(y>0) {
            com.add(new ComandoIrA(6,nValores[6][0], nValores[6][1]+y));
            com.add(new ComandoIrA(8,nValores[8][0], nValores[8][1]+y));
            com.add(new ComandoIrA(10,nValores[10][0], nValores[10][1]+y));              
        }
        
        //Nuevo
        int x=(int)bola.getX();
        
        if (x<0) {
            com.add(new ComandoIrA(4,nValores[1][0],y+10));
            com.add(new ComandoIrA(5,nValores[1][0],y-10));
            for (int n=6;n<9;n++)
                com.add(new ComandoIrA(n,nValores[n][0]+x,nValores[n][1]));
            for (int n=9;n<11;n++)
                com.add(new ComandoIrA(n,nValores[n][0]+(x/2),nValores[n][1]));
        }
        if (x<=nValores[1][0]) {
            for (int n=1;n<=5;n++)
                com.add(new ComandoIrA(n,x-1,nValores[n][1]));
        }
        
        
        //Mejorar defensa
        if (!sj.estoyMasCercaDeBola() || bola.getX()<0){
            for (int n=1;n<3;n++){
                int nJC=sj.getContrarioMasCerca(getXInicial(n), getYInicial(n));
                com.add(new ComandoIrA(n, contrarios[nJC].getX()+10, (int)contrarios[nJC].getY()));
            }
        }
        
        //Movimiento mas cercano a la bola
        int nJug=sj.getMasCercanoDeBola();
        com.add(new ComandoIrA(nJug,bola.getX(), bola.getY()));
        
        com.add(new ComandoTiroAPuerta(0,0));
        com.add(new ComandoPase(1,8));
        com.add(new ComandoPase(2,7));
        com.add(new ComandoPase(3,1));
        com.add(new ComandoPase(4,7));
        com.add(new ComandoPase(5,8));
        com.add(new ComandoTiroAPuerta(6,TirarAlHueco(sj)));
        com.add(new ComandoTiroAPuerta(7,TirarAlHueco(sj)));
        com.add(new ComandoTiroAPuerta(8,TirarAlHueco(sj)));
        com.add(new ComandoTiroAPuerta(9,TirarAlHueco(sj)));
        com.add(new ComandoTiroAPuerta(10,TirarAlHueco(sj)));
        
        return com;
    }
    
    private int TirarAlHueco(SituacionJugadores sj) {
        Point contrarios[]=sj.getContrario();
        int mayX=(int)contrarios[0].getX();
        int nJug=0;
 
        // Busca al portero
        for (int n=1;n<11;n++){
            if ((int)contrarios[n].getX() > mayX) {
                mayX=(int)contrarios[n].getX();
                nJug=n;
            }
        }
        
        int posY=(int)contrarios[nJug].getY();
        
        if(posY>0)
            return -20;
        return 20;
    }
}
